package com.yeyks.task;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.yeyks.common.base.Arguments;
import com.yeyks.common.constants.OrderStatus;
import com.yeyks.common.utils.DateUtils;
import com.yeyks.commonReference.append.sms.SmsService;
import com.yeyks.commonReference.service.consumer.UserMemberCardService;
import com.yeyks.commonReference.service.order.OrderHeadService;
import com.yeyks.consumer.dal.domain.UserLoginHistory;
import com.yeyks.consumer.dal.domain.UserMemberCard;
import com.yeyks.consumer.service.UserLoginHistoryService;
import com.yeyks.order.dal.domain.OrderHead;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

@Component
@Slf4j
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class SmsSaleTask {

    private final UserLoginHistoryService userLoginHistoryService;

    private final OrderHeadService orderHeadService;

    private final SmsService smsService;

    private final UserMemberCardService userMemberCardService;

    private static final HashMap<Integer, String> userIdAndPhoneMap = Maps.newHashMap();

    static {
        //默认发短信的的用户
        userIdAndPhoneMap.put(19997, "18329159427");
        userIdAndPhoneMap.put(20012, "13185008511");
    }

    /**
     * 有订单不是优享VIP
     * 【不是优享VIP的推送】
     */
    @Scheduled(cron = "${schedule.sms.noMinVip}")
    public void smsSaleNoMinVip(){

        log.info("开始查询有订单不是优享VIP 的用户");
//        //查询出登录过的用户，去重
//        List<UserLoginHistory> userLoginHistoryList = userLoginHistoryService
//                .list(new QueryWrapper<UserLoginHistory>()
//                        .isNotNull(UserLoginHistory.USER_ID)
//                        .groupBy(UserLoginHistory.PHONE));
//        //循环查询是否有订单
//        //定义有订单的用户
//        List<Integer> userIds = Lists.newArrayList();
//        if(!CollectionUtils.isEmpty(userLoginHistoryList)){
//            userLoginHistoryList.forEach(userLoginHistory -> {
//                int count = orderHeadService.count(new QueryWrapper<OrderHead>()
//                        .eq(OrderHead.USER_ID, userLoginHistory.getUserId())
//                        .eq(OrderHead.STATUS, OrderStatus.postCheckOut));
//                if(count > 0){
//                    userIds.add(userLoginHistory.getUserId());
//                    userIdAndPhoneMap.put(userLoginHistory.getUserId(), userLoginHistory.getPhone());
//                }
//            });
//        }
//        //筛选出没有优享VIP的用户
//        if(!CollectionUtils.isEmpty(userIds)){
//            userIds.removeIf(userId -> userMemberCardService.count(new QueryWrapper<UserMemberCard>()
//                    .eq(UserMemberCard.CARD_TYPE, 2)
//                    .eq(UserMemberCard.IS_DEL, 0)
//                    .eq(UserMemberCard.USER_ID, userId))
//                    > 0);
//            if(!CollectionUtils.isEmpty(userIds)){
//                //发送短信
//                for (Integer userId : userIds) {
//                    String phone = userIdAndPhoneMap.get(userId);
//                    if(Arguments.strNotNull(phone)){
//                        boolean flag = smsService.sendSmsForNoMinVipCardUser(phone);
//                    }
//                }
//            }
//        }
        log.info("有订单不是优享VIP ===发送短信结束");
    }

    /**
     * 新用户3天不下单 发送短信
     */
    @Scheduled(cron = "${schedule.sms.threeDay.noOrder}")
    public void smsSaleThreeDayNoOrder(){
        log.info("新用户3天未下单，定时任务发送短信开始！");
//        Date date = DateUtils.dayBefore(3);
//        Date endDate = DateUtils.setTimeToMax(date);
//        Date startDate = DateUtils.setTimeToZero(date);
//        List<UserLoginHistory> userLoginHistoryList = userLoginHistoryService
//                .queryFirstLoginByDay(startDate, endDate);
//        if(!CollectionUtils.isEmpty(userLoginHistoryList)){
//            //查询是否有订单
//            userLoginHistoryList.removeIf(userLoginHistory ->
//                orderHeadService.count(new QueryWrapper<OrderHead>()
//                .eq(OrderHead.USER_ID, userLoginHistory.getUserId())) > 0
//            );
//            if(!CollectionUtils.isEmpty(userLoginHistoryList)){
//                userLoginHistoryList.forEach(userLoginHistory -> {
//                    //发送短信
//                    boolean flag = smsService.sendSmsToUserAboutOrderIsZeroByThreeDay(userLoginHistory.getPhone());
//                });
//            }
//        }

        log.info("新用户3天未下单，== 发送短信结束");
    }
}
